const scpClient = require('scp2')
const ora = require('ora')
const chalk = require('chalk')
const server = require('./products')
const spinner = ora('正在发布到' + (process.env.NODE_ENV === 'prod' ? '生产' : '测试') + '服务器...')

var Client = require('ssh2').Client

var conn = new Client()
conn.on('ready', function () {
  // rm 删除发布路径下的旧文件，\n 是换行 换行执行,如果需要重启nginx，使用下面注释的语句，这里是用docker重启nginx
  // conn.exec('rm -rf /data/nginx/html/*\ndocker restart nginx', function (
  conn.exec('rm -rf ' + server.path + '/*\n', function (
    err,
    stream
  ) {
    if (err) throw err
    stream.on('close', function (code, signal) {
      // 在执行shell命令后，把开始上传部署项目代码放到这里面
      spinner.start()
      scpClient.scp(
        './dist',
        {
          host: server.host,
          port: server.port,
          username: server.username,
          password: server.password,
          path: server.path
        },
        function (err) {
          spinner.stop()
          if (err) {
            console.log(chalk.red('发布失败。\n'))
            throw err
          } else {
            console.log(
              chalk.green('Success! 成功发布到' + (process.env.NODE_ENV === 'prod' ? '生产' : '测试') + '服务器=[服务器名称：' + server.name + '; 服务器地址：' + server.host + ']\n')
            )
          }
        }
      )
      conn.end()
    }).on('data', function (data) {
      console.log('STDOUT: ' + data)
    }).stderr.on('data', function (data) {
      console.log('STDERR: ' + data)
    })
  })
}).connect({
  host: server.host,
  port: server.port,
  username: server.username,
  password: server.password
  // privateKey: require('fs').readFileSync('/home/admin/.ssh/id_dsa')
})
